package psn.polaris;

import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;

import java.io.Serializable;

public class BasicCacheUtil {

    private static CacheManager cacheManager = null;

    public static final String deafult_cache = "default";

    /**
     * 向指定缓存中加入对象
     * @param blockName 缓存区块名
     * @param key       缓存Key
     * @param val       缓存值
     * @param <T>       缓存对象
     * @return          加入结果
     */
    public <T extends Serializable> boolean addCacheToTarget(String blockName, String key, T val){
        Cache cache = cacheManager.getCache(blockName);
        if(cache!=null) {
            cache.put(key, val);
            return true;
        }else {
            return false;
        }
    }

    /**
     * 向指定缓存中加入对象
     * @param key       缓存Key
     * @param val       缓存值
     * @param <T>       缓存对象
     * @return          加入结果
     */
    public <T extends Serializable> boolean addCacheToDefault(String key, T val){
        return addCacheToTarget(deafult_cache, key, val);
    }

    /**
     * 从指定缓存中获取缓存值
     * @param blockName 指定缓存区块名
     * @param key       缓存Key
     * @param clazz     值类型
     * @return          返回值
     * @param <T>       缓存类型
     */
    public <T extends Serializable> T getCacheFromTarget(String blockName,String key, Class<T> clazz){
        Cache cache = cacheManager.getCache(blockName);
        if(null!=cache){
            return cache.get(key, clazz);
        }
        return null;
    }

    /**
     * 从默认缓存中获取缓存值
     * @param key       缓存Key
     * @param clazz     值类型
     * @return          返回值
     * @param <T>       缓存类型
     */
    public <T extends Serializable> T getCacheFromDefault(String key, Class<T> clazz){
        return getCacheFromTarget(deafult_cache, key, clazz);
    }

    public void registerCacheManager(CacheManager cacheManager){
        if(null!=cacheManager){
            BasicCacheUtil.cacheManager = cacheManager;
        }
    }

}
